package Controle;

import util.Constantes;
import Jplay.Keyboard;
import MotorGrafico.Indice;
import MotorGrafico.MotorGrafico;
import MotorGrafico.Tabuleiro;

/**
 * Classe respons�vel pela promo��o do pe�o.
 * 
 * @author Gefersom C. Lima
 * 
 */
public class PromocaoPeaoLogica {

	/**
	 * M�todo respons�vel pela promo��o do pe�o.
	 * 
	 * @param tipoPeca
	 *            Tipo de pe�o que foi selecionado
	 * @param tabuleiro
	 *            Inst�ncia do tabuleiro.
	 * @param moverParaCasa
	 *            Posi��o alvo do pe�o.
	 */
	public void promoverPeao(int tipoPeca, Tabuleiro tabuleiro,
			Indice moverParaCasa) {
		// Cria um nova inst�ncia da classe
		TelaPromocaoPeao tela = new TelaPromocaoPeao(tipoPeca);
		tela.carregar();

		// Fica no loop at� que uma pe�a seja escolhida
		int pecaEscolhida = 0;
		Keyboard teclado = MotorGrafico.getInstancia().getJanela()
				.getKeyboard();
		while (pecaEscolhida == 0) {
			tela.logica();
			tela.desenhar();
			pecaEscolhida = tela.getPecaEscolhida();
			if (teclado.keyDown(Keyboard.ESCAPE_KEY))
				MotorGrafico.getInstancia().getJanela().exit();
		}

		// Descarrega a tela
		tela.descarregar();

		// Seta a pr�xima tela que deve ser executada.
		tela.proxTela();

		// Verifica o tipo de pe�a que foi escolhida
		switch (pecaEscolhida) {
		case Constantes.TELA_PROMO_PEAO_BISPO:
			pecaEscolhida = (tipoPeca == Constantes.WHITE_PEAO ? Constantes.WHITE_BISPO
					: Constantes.BLACK_BISPO);
			break;
		case Constantes.TELA_PROMO_PEAO_CAVALO:
			pecaEscolhida = (tipoPeca == Constantes.WHITE_PEAO ? Constantes.WHITE_CAVALO
					: Constantes.BLACK_CAVALO);
			break;
		case Constantes.TELA_PROMO_PEAO_RAINHA:
			pecaEscolhida = (tipoPeca == Constantes.WHITE_PEAO ? Constantes.WHITE_RAINHA
					: Constantes.BLACK_RAINHA);
			break;
		case Constantes.TELA_PROMO_PEAO_TORRE:
			pecaEscolhida = (tipoPeca == Constantes.WHITE_PEAO ? Constantes.WHITE_TORRE
					: Constantes.BLACK_TORRE);
			break;
		default:
			break;
		}

		// Adiciona a pe�a escolhida ao tabuleiro.
		tabuleiro.setPeca(pecaEscolhida, moverParaCasa.i, moverParaCasa.j);

	}

}
